package com.smart4j.framework.aop.spring.aspect;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

/**
 * description: Spring + AspectJ 基于【注解】 实现SpringAOP  对方法进行拦截。
 * @version v1.0
 * @author w
 * @date 2018年9月24日下午8:29:09
 */
@Aspect
@Component
public class GreetingAspect {
	
	
	/**
	 * description: 基于AspectJ 对方法进行拦截。
	 * @param pjp
	 * @return Object
	 * @throws Throwable
	 * @version v1.0
	 * @author w
	 * @date 2018年9月24日 下午8:40:26
	 * @execution execution(* com.xx.Method(..): 
	 * 	1、 execution 表示对方法进行拦截。 
	 *  2、 第一个 "*" 表示方法的返回值是任意的。
	 *  3、 com.xx.Method 方法的签名。 若是 com.xx.*,表示拦截该类中所有方法。 com.xx.say，表示拦截方法名为say的方法。
	 *  4、 (..) 表示方法的参数是任意的。
	 */
 	@Around(value = "execution(* com.smart4j.framework.aop.spring.advisor.GreetingAdvisorImpl.good*(..))") //good 开头的方法进行切面
// 	@Around(value = "execution(* com.smart4j.framework.aop.spring.advisor.GreetingAdvisorImpl.*(..))")
//	@Around(value="@annotation(com.smart4j.framework.aop.spring.aspect.Tag)") // 基于注解实现 AOP
	public Object around(ProceedingJoinPoint pjp) throws Throwable{
		System.out.println("before ---> aspectJ : "+GreetingAspect.class.getName());
		// 执行目标对象的方法。。
		Object result = pjp.proceed();
		System.out.println("after ---> aspectJ！。。。");
		return  result;
	}
	
	
}	
